import store from '@/store'

/**
 * 权限控制工具类
 * 用于在页面内部进行细粒度的权限控制
 */

/**
 * 检查用户是否有指定权限
 * @param {string|Array} permission 权限名称或权限数组
 * @returns {boolean} 是否有权限
 */
export function hasPermission(permission) {
  const userRole = store.getters['user/userRole']
  
  if (!userRole) {
    return false
  }
  
  // 管理员拥有所有权限
  if (userRole === 'ADMIN') {
    return true
  }
  
  // 如果传入的是数组，检查是否包含用户角色
  if (Array.isArray(permission)) {
    return permission.includes(userRole)
  }
  
  // 如果传入的是字符串，直接比较
  return permission === userRole
}

/**
 * 检查用户是否可以执行指定操作
 * @param {string} action 操作名称
 * @param {string} resource 资源名称
 * @returns {boolean} 是否可以执行操作
 */
export function canPerformAction(action, resource) {
  const userRole = store.getters['user/userRole']
  
  if (!userRole) {
    return false
  }
  
  // 管理员可以执行所有操作
  if (userRole === 'ADMIN') {
    return true
  }
  
  // 定义角色权限矩阵
  const permissions = {
    'TEACHER': {
      'student-management': ['view', 'search'],
      'teacher-management': ['view', 'search'],
      'course-management': ['view', 'search', 'create', 'edit', 'delete'],
      'grade-management': ['view', 'search', 'create', 'edit', 'delete']
    },
    'STUDENT': {
      'student-management': ['view', 'search'],
      'course-management': ['view', 'search'],
      'enrollment-management': ['view', 'search', 'create', 'delete'],
      'grade-management': ['view', 'search']
    }
  }
  
  const rolePermissions = permissions[userRole]
  if (!rolePermissions || !rolePermissions[resource]) {
    return false
  }
  
  return rolePermissions[resource].includes(action)
}

/**
 * 检查用户是否可以查看指定资源
 * @param {string} resource 资源名称
 * @returns {boolean} 是否可以查看
 */
export function canView(resource) {
  return canPerformAction('view', resource)
}

/**
 * 检查用户是否可以创建指定资源
 * @param {string} resource 资源名称
 * @returns {boolean} 是否可以创建
 */
export function canCreate(resource) {
  return canPerformAction('create', resource)
}

/**
 * 检查用户是否可以编辑指定资源
 * @param {string} resource 资源名称
 * @returns {boolean} 是否可以编辑
 */
export function canEdit(resource) {
  return canPerformAction('edit', resource)
}

/**
 * 检查用户是否可以删除指定资源
 * @param {string} resource 资源名称
 * @returns {boolean} 是否可以删除
 */
export function canDelete(resource) {
  return canPerformAction('delete', resource)
}

/**
 * 获取用户角色
 * @returns {string} 用户角色
 */
export function getUserRole() {
  return store.getters['user/userRole']
}

/**
 * 检查是否为管理员
 * @returns {boolean} 是否为管理员
 */
export function isAdmin() {
  return getUserRole() === 'ADMIN'
}

/**
 * 检查是否为教师
 * @returns {boolean} 是否为教师
 */
export function isTeacher() {
  return getUserRole() === 'TEACHER'
}

/**
 * 检查是否为学生
 * @returns {boolean} 是否为学生
 */
export function isStudent() {
  return getUserRole() === 'STUDENT'
}
